{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "660fa691-a5c2-4146-8891-cbaf3b551159",
   "metadata": {},
   "source": [
    "# 单变量梯度下降算法\n",
    "\n",
    "https://zhuanlan.zhihu.com/p/125744910\n",
    "\n",
    "假设要优化一个函数$y = f(x) = 0.5(x-0.25)^2$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "9c0d9b31-94e9-4971-ac80-6dabac3c0399",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义需要优化的函数\n",
    "def f(x):\n",
    "    return 0.5 * (x - 0.25) ** 2\n",
    "\n",
    "# f(x)的导数\n",
    "def df(x):\n",
    "    return x - 0.25"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbfe03aa-7b42-4b25-914d-fb4150c55104",
   "metadata": {},
   "source": [
    "## 梯度下降过程\n",
    "既然在不断的优化目标函数，算法总要有个停止的时候，当优化次数大于100 的时候就停止优化（你也可以选择多迭代几次），或者当这一次优化和上一次优化的差距已经非常小，小到接近0时，我们也停止优化（这说明已经优化到最优值了，导数已经接近为0，我们知道，函数的极值出现在一阶导数为0的地方）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "d82132bb-7917-4a79-90d4-ac88e0fadc9d",
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_descent(alpha):\n",
    "    # 为了将优化过程保留下来, 还需要一些额外的变量\n",
    "    GD_X = [] #每次x更新后把值存在这个列表里面\n",
    "    GD_Y = [] #每次更新x后目标函数的值存在这个列表里面\n",
    "    x = 4 #随机初始化的x,其他的值也可以\n",
    "    iter_num = 0\n",
    "    f_current = f_change = f(x)\n",
    "    while iter_num <1000 and f_change > 1e-10: #迭代次数小于100次或者函数变化小于1e-10次方时停止迭代\n",
    "        iter_num += 1\n",
    "        x = x - alpha * df(x)\n",
    "        tmp = f(x)\n",
    "        f_change = abs(f_current - tmp)\n",
    "        f_current = tmp\n",
    "        GD_X.append(x)\n",
    "        GD_Y.append(f_current)\n",
    "    return GD_X, GD_Y"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "afef1bec-b198-45c9-a977-52ef76f5fe41",
   "metadata": {},
   "source": [
    "## 可视化\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "6e81b6e3-cdcd-4f74-8545-9018baa4150d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "len(GD_X) 112\n",
      "iter_num 112\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 定义学习率\n",
    "alpha = 0.1\n",
    "GD_X, GD_Y = gradient_descent(alpha)\n",
    "GD_X #可以看出x已经无限逼近0.25了\n",
    "print('len(GD_X)', len(GD_X))\n",
    "print('iter_num', iter_num)\n",
    "\n",
    "\n",
    "X = np.arange(-4,4,0.05)\n",
    "Y = f(X)\n",
    "Y = np.array(Y)\n",
    "\n",
    "plt.plot(X,Y)\n",
    "plt.scatter(GD_X,GD_Y)\n",
    "plt.title(\"$y = 0.5(x - 0.25)^2$\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "ac497e29-2779-449c-9677-97cfb4592afe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 将学习率改为1.8\n",
    "alpha = 1.8\n",
    "GD_X, GD_Y = gradient_descent(alpha)\n",
    "plt.plot(X,Y)\n",
    "plt.plot(GD_X,GD_Y) #注意为了显示清楚每次变化这里我做了调整\n",
    "plt.title(\"$y = 0.5(x - 0.25)^2$\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
